ãœãããŠã§ã¢ãã©ã³ã¶ã¯ã·ã§ãã«ã¡ã¢ãªïŒSTMïŒãšãã®äžŠè¡ããŒã¿æ§é äœæãžã®å¿çšã«ã€ããŠæ¢æ±ããŸããSTMã®å©ç¹ã課é¡ãããã³ã°ããŒãã«ãœãããŠã§ã¢éçºã«ãããå®è·µçãªå®è£ ã«ã€ããŠåŠã³ãŸãããã
ãœãããŠã§ã¢ãã©ã³ã¶ã¯ã·ã§ãã«ã¡ã¢ãªïŒã°ããŒãã«ãªãŒãã£ãšã³ã¹åã䞊è¡ããŒã¿æ§é ã®æ§ç¯
æ¥éã«é²åãããœãããŠã§ã¢éçºã®åéã«ãããŠãå¹ççã§ä¿¡é Œæ§ã®é«ã䞊è¡ããã°ã©ãã³ã°ã®å¿ èŠæ§ã¯æ¥µããŠéèŠã«ãªã£ãŠããŸãããã«ãã³ã¢ããã»ããµãåœå¢ãè¶ãã忣ã·ã¹ãã ã®å°é ã«ãããå ±æãªãœãŒã¹ã®ç®¡çãšäžŠåæäœã®èª¿æŽã¯ãéèŠãªèª²é¡ãšãªã£ãŠããŸãããœãããŠã§ã¢ãã©ã³ã¶ã¯ã·ã§ãã«ã¡ã¢ãªïŒSTMïŒã¯ããããã®èª²é¡ã«å¯ŸåŠããããã®åŒ·åãªãã©ãã€ã ãšããŠç»å Žãã䞊è¡ããŒã¿æ§é ãæ§ç¯ããã°ããŒãã«ãªãŒãã£ãšã³ã¹ãã¢ã¯ã»ã¹å¯èœãªäžŠåã¢ããªã±ãŒã·ã§ã³ã®éçºãç°¡çŽ åããããã®å ç¢ãªã¡ã«ããºã ãæäŸããŸãã
ãœãããŠã§ã¢ãã©ã³ã¶ã¯ã·ã§ãã«ã¡ã¢ãªïŒSTMïŒãšã¯ïŒ
STMã¯ããã®æ žå¿ã«ãããŠãããã°ã©ããŒãæç€ºçã«ããã¯ã管çããããšãªã䞊è¡ã³ãŒããèšè¿°ã§ããããã«ããäžŠè¡æ§å¶åŸ¡ã¡ã«ããºã ã§ããããã«ãããéçºè ã¯äžé£ã®ã¡ã¢ãªæäœããããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ãšåæ§ã«ããã©ã³ã¶ã¯ã·ã§ã³ãšããŠæ±ãããšãã§ããŸãããã©ã³ã¶ã¯ã·ã§ã³ã¯æåããã°ãã®å€æŽãä»ã®ãã¹ãŠã®ã¹ã¬ããã«å¯èŠåããããã倱æããã°ãã¹ãŠã®å€æŽãç Žæ£ãããå ±æããŒã¿ã¯äžè²«ããç¶æ ã«ä¿ãããŸãããã®ã¢ãããŒãã¯ãããã¯ç®¡çã®è€éããæœè±¡åãããããããã¯ãã©ã€ãããã¯ãšãã£ãäžè¬çãªäžŠè¡æ§åé¡ã®ãªã¹ã¯ãäœæžããããšã§ã䞊è¡ããã°ã©ãã³ã°ãç°¡çŽ åããŸãã
ã°ããŒãã«ãªeã³ããŒã¹ãã©ãããã©ãŒã ãèããŠã¿ãŸããããæ¥æ¬ããã©ãžã«ãã«ãããªã©ãç°ãªãåœã®è€æ°ã®ãŠãŒã¶ãŒããåæã«ããååã®åšåº«ãæŽæ°ããããšãããããããŸãããåŸæ¥ã®ããã¯ã¡ã«ããºã ã䜿çšãããšãããã¯å®¹æã«ç«¶åãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸããSTMã䜿çšãããšããããã®æŽæ°ã¯ãã©ã³ã¶ã¯ã·ã§ã³å ã«ã«ãã»ã«åã§ããŸããè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåæã«åãååã倿Žããå ŽåãSTMã¯ç«¶åãæ€åºãã1ã€ãŸãã¯è€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ããå詊è¡ããŸããããã«ããã䞊è¡ã¢ã¯ã»ã¹ãèš±å¯ãã€ã€ãããŒã¿ã®äžè²«æ§ãä¿èšŒãããŸãã
STMã䜿çšããå©ç¹
- äžŠè¡æ§ã®ç°¡çŽ åïŒ STMã¯ãããã¯ç®¡çã®è€éããæœè±¡åããããšã«ããã䞊è¡ããã°ã©ãã³ã°ãå€§å¹ ã«ç°¡çŽ åããŸããéçºè ã¯ãåæã®è€éãªè©³çްã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®ããžãã¯ã«éäžã§ããŸãã
- ã¹ã±ãŒã©ããªãã£ã®åäžïŒ STMã¯ãããã¯ããŒã¹ã®äžŠè¡æ§ã«é¢é£ããç«¶åãæžããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªãã£ãåäžãããããšãã§ããŸããããã¯ãã€ã³ãããã€ãžã§ãªã¢ããã€ããªã©ã®åœéçãªãŠãŒã¶ãŒããã®å€§éã®ãã©ãã£ãã¯ãã¢ããªã±ãŒã·ã§ã³ãåŠçããªããã°ãªããªã仿¥ã®ç¶æ³ã«ãããŠãç¹ã«éèŠã§ãã
- ãããããã¯ãªã¹ã¯ã®äœæžïŒ STMã¯ãåºç€ãšãªãå®è£ ãç«¶åã管çããç«¶åãããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãããããããã¯ããŒã¹ã®äžŠè¡æ§ã§äžè¬çãªå€ãã®ãããããã¯ã·ããªãªãæ¬è³ªçã«åé¿ããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®æ§æå¯èœæ§ïŒ STMã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®æ§æãå¯èœã«ããéçºè ãè€æ°ã®ã¢ãããã¯æäœãããå€§èŠæš¡ã§è€éãªãã©ã³ã¶ã¯ã·ã§ã³ã«çµåããŠãè€æ°ã®ããŒã¿æ§é ã«ãããã¢ãããã¯æ§ãšäžè²«æ§ãä¿èšŒããããšãæå³ããŸãã
- ã³ãŒãã®ä¿å®æ§ã®åäžïŒ åæã®è©³çŽ°ãæœè±¡åããããšã«ãããSTMã¯ããã¯ãªãŒã³ã§ãèªã¿ããããä¿å®ããããã³ãŒããä¿é²ããŸããããã¯ãã¹ã€ã¹ãã·ã³ã¬ããŒã«ãè±åœãªã©ã®ã°ããŒãã«éèæ©é¢åããœãããŠã§ã¢ãéçºããããŒã ã®ããã«ãç°ãªãã¿ã€ã ãŸãŒã³ãå°ççå Žæã«ãŸãããå€§èŠæš¡ãããžã§ã¯ãã«åãçµãããŒã ã«ãšã£ãŠäžå¯æ¬ ã§ãã
課é¡ãšèæ ®äºé
STMã¯æ°å€ãã®å©ç¹ãæäŸããŸãããéçºè ãèªèããŠããã¹ãç¹å®ã®èª²é¡ãšèæ ®äºé ãæç€ºããŸãã
- ãªãŒããŒãããïŒ STMã®å®è£ ã¯ãç¹ã«ç«¶åãäœãå Žåãããã¯ããŒã¹ã®äžŠè¡æ§ãšæ¯èŒããŠãªãŒããŒãããã䌎ãããšããããããŸããã©ã³ã¿ã€ã ã·ã¹ãã ã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ã远跡ããç«¶åãæ€åºãããã©ã³ã¶ã¯ã·ã§ã³ã®ããŒã«ããã¯ã管çããå¿ èŠããããŸãã
- ç«¶åïŒ é«ãç«¶åã¯ãSTMã®ããã©ãŒãã³ã¹ã²ã€ã³ãå€§å¹ ã«äœäžãããå¯èœæ§ããããŸããå€ãã®ã¹ã¬ãããåžžã«åãããŒã¿ã倿Žããããšãããšãã·ã¹ãã ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®ããŒã«ããã¯ãšå詊è¡ã«å€ãã®æéãè²»ããå¯èœæ§ããããŸããããã¯ãã°ããŒãã«åžå Žåãã®é«ãã©ãã£ãã¯ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããéã«èæ ®ãã¹ãç¹ã§ãã
- æ¢åã³ãŒããšã®çµ±åïŒ STMãæ¢åã®ã³ãŒãããŒã¹ã«çµ±åããããšã¯è€éã«ãªãå¯èœæ§ããããç¹ã«ã³ãŒããåŸæ¥ã®ããã¯ããŒã¹ã®åæã«å€§ããäŸåããŠããå Žåã¯ããã§ããæ éãªèšç»ãšãªãã¡ã¯ã¿ãªã³ã°ãå¿ èŠã«ãªãå ŽåããããŸãã
- éãã©ã³ã¶ã¯ã·ã§ã³æäœïŒ ãã©ã³ã¶ã¯ã·ã§ã³ã«ç°¡åã«çµ±åã§ããªãæäœïŒäŸïŒI/Oæäœãã·ã¹ãã ã³ãŒã«ïŒã¯èª²é¡ãšãªãå¯èœæ§ããããŸãããããã®æäœã¯ãç«¶åãåé¿ãããã¢ãããã¯æ§ã確ä¿ãããããããã«ãç¹å¥ãªåŠçãå¿ èŠã«ãªãå ŽåããããŸãã
- ãããã°ãšãããã¡ã€ãªã³ã°ïŒ ãã©ã³ã¶ã¯ã·ã§ã³ã®åäœã¯ãã埮åŠã§ãããããSTMã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãšãããã¡ã€ãªã³ã°ã¯ãããã¯ããŒã¹ã®äžŠè¡æ§ãããè€éã«ãªãå¯èœæ§ããããŸããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŠè§£æ±ºããã«ã¯ãç¹å¥ãªããŒã«ãšæè¡ãå¿ èŠã«ãªãå ŽåããããŸãã
STMã«ãã䞊è¡ããŒã¿æ§é ã®å®è£
STMã¯ã次ã®ãããªäžŠè¡ããŒã¿æ§é ã®æ§ç¯ã«ç¹ã«é©ããŠããŸãã
- 䞊è¡ãã¥ãŒïŒ 䞊è¡ãã¥ãŒã¯ãè€æ°ã®ã¹ã¬ãããã¢ã€ãã ãå®å šã«ãšã³ãã¥ãŒããã³ããã¥ãŒã§ããããã«ããã¹ã¬ããééä¿¡ã«ãã䜿çšãããŸãã
- 䞊è¡ããã·ã¥ããŒãã«ïŒ 䞊è¡ããã·ã¥ããŒãã«ã¯ãåãããŒã¿æ§é ãžã®äžŠè¡èªã¿æžãããµããŒãããå€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- 䞊è¡ãªã³ã¯ãªã¹ãïŒ STMã¯ããã¯ããªãŒã®ãªã³ã¯ãªã¹ãã®éçºãç°¡çŽ åãããªã¹ãèŠçŽ ãžã®å¹ççãªäžŠè¡ã¢ã¯ã»ã¹ãå¯èœã«ããŸãã
- ã¢ãããã¯ã«ãŠã³ã¿ãŒïŒ STMã¯ãã¢ãããã¯ã«ãŠã³ã¿ãŒã管çããããã®å®å šãã€å¹ççãªæ¹æ³ãæäŸããé«ãäžŠè¡æ§äžã§ãæ£ç¢ºãªçµæãä¿èšŒããŸãã
å®è·µäŸïŒæŠå¿µçãªã³ãŒãã¹ãããã - èšèªéäŸåïŒ
ååãå®èšŒããããã«ãããã€ãã®æŠå¿µçãªã³ãŒãã¹ããããã瀺ããŸãããããããã®äŸã¯èšèªéäŸåã§ãããç¹å®ã®èšèªã§åäœããã³ãŒããæäŸããã®ã§ã¯ãªããã¢ã€ãã¢ãäŒããããšãç®çãšããŠããŸãã
äŸïŒã¢ãããã¯ãªã€ã³ã¯ãªã¡ã³ãïŒæŠå¿µçïŒ
transaction {
int currentValue = read(atomicCounter);
write(atomicCounter, currentValue + 1);
}
ãã®æŠå¿µçãªã³ãŒãã§ã¯ã`transaction`ãããã¯ã¯ã`atomicCounter`ã«å¯Ÿãã`read`ããã³`write`æäœãã¢ãããã¯ã«å®è¡ãããããšãä¿èšŒããŸããããå¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã`read`ãš`write`æäœã®éã«`atomicCounter`ã倿Žããå Žåããã©ã³ã¶ã¯ã·ã§ã³ã¯STMå®è£ ã«ãã£ãŠèªåçã«å詊è¡ãããŸãã
äŸïŒäžŠè¡ãã¥ãŒãžã®ãšã³ãã¥ãŒæäœïŒæŠå¿µçïŒ
transaction {
// Read the current tail
Node tail = read(queueTail);
// Create a new node
Node newNode = createNode(data);
// Update the next pointer of the tail node
write(tail.next, newNode);
// Update the tail pointer
write(queueTail, newNode);
}
ãã®æŠå¿µçãªäŸã¯ã䞊è¡ãã¥ãŒã«ããŒã¿ãå®å šã«ãšã³ãã¥ãŒããæ¹æ³ã瀺ããŠããŸãã`transaction`ãããã¯å ã®ãã¹ãŠã®æäœã¯ã¢ãããã¯ã§ããããšãä¿èšŒãããŸããããå¥ã®ã¹ã¬ããã䞊è¡ããŠãšã³ãã¥ãŒãŸãã¯ããã¥ãŒããå ŽåãSTMã¯ç«¶åãåŠçããããŒã¿ã®äžè²«æ§ãä¿èšŒããŸãã`read`ãš`write`颿°ã¯STM察å¿ã®æäœã衚ããŸãã
ç°ãªãããã°ã©ãã³ã°èšèªã«ãããSTMå®è£
STMã¯ãã¹ãŠã®ããã°ã©ãã³ã°èšèªã«çµã¿èŸŒãŸããæ©èœã§ã¯ãããŸããããããã€ãã®ã©ã€ãã©ãªãèšèªæ¡åŒµãSTMæ©èœãæäŸããŠããŸãããããã®ã©ã€ãã©ãªã®å©çšå¯èœæ§ã¯ããããžã§ã¯ãã«äœ¿çšãããããã°ã©ãã³ã°èšèªã«ãã£ãŠå€§ããç°ãªããŸããåºã䜿çšãããŠããäŸãããã€ãæããŸãã
- JavaïŒ Javaã«ã¯ã³ã¢èšèªã«STMãçµã¿èŸŒãŸããŠããŸããããMultiverseãªã©ã®ã©ã€ãã©ãªãSTMå®è£ ãæäŸããŠããŸããJavaã§STMã䜿çšãããšãé«ãäžŠè¡æ§ãæã€ã¢ããªã±ãŒã·ã§ã³ã®å¹çãšã¹ã±ãŒã©ããªãã£ãå€§å¹ ã«åäžãããããšãã§ããŸããããã¯ãé«å®¹éã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®å šãã€å¹ççã«ç®¡çããå¿ èŠãããéèã¢ããªã±ãŒã·ã§ã³ããäžåœããã©ãžã«ãç±³åœãªã©ã®åœéããŒã ã«ãã£ãŠéçºãããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«é¢é£æ§ããããŸãã
- C++ïŒ C++éçºè ã¯ãIntelã®ãã©ã³ã¶ã¯ã·ã§ãã«åææ¡åŒµïŒTSXïŒïŒããŒããŠã§ã¢æ¯æŽSTMïŒããBoost.Atomicãªã©ã®ãœãããŠã§ã¢ããŒã¹ã®ã©ã€ãã©ãªã䜿çšã§ããŸãããããã¯ãè€éãªã¢ãŒããã¯ãã£ãæã€ã·ã¹ãã äžã§å¹ççã«å®è¡ããå¿ èŠããã䞊è¡ã³ãŒããå¯èœã«ããŸãã
- HaskellïŒ Haskellã¯èšèªã«çŽæ¥STMãµããŒããçµã¿èŸŒãŸããŠããã䞊è¡ããã°ã©ãã³ã°ãæ¯èŒç容æã«ããŸããHaskellã®çŽç²ãªé¢æ°åç¹æ§ãšçµã¿èŸŒã¿STMã¯ãããŒã¿ã®æŽåæ§ãç¶æããå¿ èŠãããããŒã¿éçŽåã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããããã€ããã¹ãŠã§ãŒãã³ãè±åœãªã©ã®åœã ããŸãã忣ã·ã¹ãã ã®æ§ç¯ã«é©ããŠããŸãã
- C#ïŒ C#ã«ã¯ãã€ãã£ãã®STMå®è£ ã¯ãããŸããããæ¥œèгçäžŠè¡æ§ãããŸããŸãªããã¯ã¡ã«ããºã ãªã©ã®ä»£æ¿ã¢ãããŒãã䜿çšãããŸãã
- PythonïŒ Pythonã«ã¯çŸåšãã€ãã£ããªSTMå®è£ ããããŸããããç ç©¶ãããžã§ã¯ããå€éšã©ã€ãã©ãªããã®å®è£ ã詊ã¿ãŠããŸããå€ãã®Pythonéçºè ã¯ããã«ãããã»ãã·ã³ã°ãã¹ã¬ããã¢ãžã¥ãŒã«ãªã©ãä»ã®äžŠè¡æ§ããŒã«ãã©ã€ãã©ãªã«é ŒãããšããããããŸãã
- GoïŒ Goã¯äžŠè¡æ§ã®ããã«ãŽã«ãŒãã³ãšãã£ãã«ãæäŸããŠãããããã¯STMãšã¯ç°ãªããã©ãã€ã ã§ããããããGoã®ãã£ãã«ã¯ãåŸæ¥ã®ããã¯ã¡ã«ããºã ãå¿ èŠãšããã«ã䞊è¡ãããŽã«ãŒãã³éã§å®å šãªããŒã¿å ±æãšããåæ§ã®å©ç¹ãæäŸãããããã°ããŒãã«ã«ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã®ã«é©ãããã¬ãŒã ã¯ãŒã¯ã§ãã
ããã°ã©ãã³ã°èšèªãšSTMã©ã€ãã©ãªãéžæããéãéçºè ã¯ããã©ãŒãã³ã¹ç¹æ§ã䜿ãããããæ¢åã®ã³ãŒãããŒã¹ãããã³ã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ãªã©ã®èŠçŽ ãèæ ®ããå¿ èŠããããŸãã
STM䜿çšã®ãã¹ããã©ã¯ãã£ã¹
STMã广çã«æŽ»çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããã
- ãã©ã³ã¶ã¯ã·ã§ã³ãµã€ãºã®æå°åïŒ ç«¶åã®å¯èœæ§ãæžãããããã©ãŒãã³ã¹ãåäžãããããã«ããã©ã³ã¶ã¯ã·ã§ã³ã¯å¯èœãªéãçãä¿ã¡ãŸãã
- é·æéå®è¡æäœã®åé¿ïŒ ãã©ã³ã¶ã¯ã·ã§ã³å ã§æéã®ãããæäœïŒäŸïŒãããã¯ãŒã¯åŒã³åºãããã¡ã€ã«I/OïŒãå®è¡ããããšãé¿ããŠãã ããããããã®æäœã¯ãç«¶åã®å¯èœæ§ãé«ããä»ã®ã¹ã¬ããããããã¯ããå¯èœæ§ããããŸãã
- äžŠè¡æ§ã®ããã®èšèšïŒ STMã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãæ éã«èšèšããç«¶åãæå°éã«æããäžŠåæ§ãæå€§åããŸããããŒã¿ã®ããŒãã£ã·ã§ãã³ã°ãããã¯ããªãŒããŒã¿æ§é ã®äœ¿çšãªã©ã®ãã¯ããã¯ãæ€èšããŠãã ããã
- å詊è¡ã®åŠçïŒ ãã©ã³ã¶ã¯ã·ã§ã³ãå詊è¡ãããããšã«åããŠãã ãããå詊è¡ãé©åã«åŠçãã誀ã£ãçµæã«ã€ãªããå¯èœæ§ã®ããå¯äœçšãé¿ããããã«ã³ãŒããèšèšããŸãã
- ç£èŠãšãããã¡ã€ãªã³ã°ïŒ STMã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠãããããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ãã察åŠããŸããããã¯ããããã¯ãŒã¯ã®ç¶æ ãããŒããŠã§ã¢æ§æã倧ããç°ãªãå¯èœæ§ãããã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«ã¢ããªã±ãŒã·ã§ã³ãå±éããéã«ç¹ã«éèŠã§ãã
- åºç€ãšãªãå®è£ ã®çè§£ïŒ STMã¯ããã¯ç®¡çã®å€ãã®è€éããæœè±¡åããŸãããSTMå®è£ ãå éšã§ã©ã®ããã«æ©èœããããçè§£ããããšã¯åœ¹ç«ã¡ãŸãããã®ç¥èã¯ãã³ãŒãã®æ§é åæ¹æ³ãããã©ãŒãã³ã¹ã®æé©åã«ã€ããŠãæ å ±ã«åºã¥ããæ±ºå®ãäžãã®ã«åœ¹ç«ã¡ãŸãã
- 培åºçãªãã¹ãïŒ å¹ åºãã¯ãŒã¯ããŒããšç«¶åã¬ãã«ã§STMã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããæ£ããåäœããããã©ãŒãã³ã¹ãåªããŠããããšã確èªããŸãã倿§ãªå Žæãã¿ã€ã ãŸãŒã³ã§ã®ç¶æ³ã«å¯ŸããŠãã¹ãããããã«ãããŸããŸãªãã¹ãããŒã«ã䜿çšããŠãã ããã
忣ã·ã¹ãã ã«ãããSTM
STMã®ååã¯åäžãã·ã³ã®äžŠè¡æ§ãè¶ ããŠåºããã忣ã·ã¹ãã ã«ãææã§ããå®å šãªåæ£STMå®è£ ã¯é倧ãªèª²é¡ãæç€ºããŸãããã¢ãããã¯æäœãšç«¶åæ€åºã®ã³ã¢ã³ã³ã»ããã¯é©çšã§ããŸããã°ããŒãã«ã«åæ£ãããããŒã¿ããŒã¹ãèããŠã¿ãŸããããè€æ°ã®ããŒã¿ã»ã³ã¿ãŒã«ãããããŒã¿ã®äžè²«æ§ãä¿èšŒããããã«ãSTMã®ãããªæ§ç¯ç©ã䜿çšããããšãã§ããŸãããã®ã¢ãããŒãã«ãããäžçäžã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸã§ãããå¯çšæ§ãé«ãã¹ã±ãŒã©ãã«ãªã·ã¹ãã ã®äœæãå¯èœã«ãªããŸãã
忣STMã«ããã課é¡ã«ã¯ä»¥äžãå«ãŸããŸãã
- ãããã¯ãŒã¯ã¬ã€ãã³ã·ãŒïŒ ãããã¯ãŒã¯ã¬ã€ãã³ã·ãŒã¯ã忣ãã©ã³ã¶ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ã«å€§ãã圱é¿ããŸãã
- é害åŠçïŒ ããŒãé害ãåŠçããé害çºçæã®ããŒã¿äžè²«æ§ã確ä¿ããããšãéèŠã§ãã
- 調æŽïŒ è€æ°ã®ããŒãéã§ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®èª¿æŽã«ã¯ãé«åºŠãªãããã³ã«ãå¿ èŠã§ãã
ãããã®èª²é¡ã«ããããããããã®åéã®ç ç©¶ã¯ç¶ç¶ãããŠãããSTMãããå ç¢ã§ã¹ã±ãŒã©ãã«ãªåæ£ã·ã¹ãã ã®æ§ç¯ã«è²¢ç®ããå¯èœæ§ããããŸãã
STMã®æªæ¥
STMã®åéã¯åžžã«é²åããŠãããããã©ãŒãã³ã¹ã®åäžãèšèªãµããŒãã®æ¡å€§ãæ°ããã¢ããªã±ãŒã·ã§ã³ã®æ¢æ±ã«çŠç¹ãåœãŠãç ç©¶éçºãé²è¡äžã§ãããã«ãã³ã¢ããã»ããµãšåæ£ã·ã¹ãã ããŸããŸãæ®åããã«ã€ããŠãSTMããã³é¢é£æè¡ã¯ãœãããŠã§ã¢éçºã®åéã§ãŸããŸãéèŠãªåœ¹å²ãæããã§ãããã以äžã®é²æ©ãæåŸ ãããŸãã
- ããŒããŠã§ã¢æ¯æŽSTMïŒ STMã®ããŒããŠã§ã¢ãµããŒãã¯ãç«¶åæ€åºãšããŒã«ããã¯æäœãé«éåããããšã§ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããIntelã®Transactional Synchronization ExtensionsïŒTSXïŒã¯ãSTMã®ããŒããŠã§ã¢ã¬ãã«ã®ãµããŒããæäŸããæ³šç®ãã¹ãäŸã§ãã
- ããã©ãŒãã³ã¹ã®åäžïŒ ç ç©¶è ãšéçºè ã¯ãç¹ã«é«ç«¶åã·ããªãªã«ãããŠããªãŒããŒããããåæžãããã©ãŒãã³ã¹ãåäžãããããã«STMå®è£ ã®æé©åã«ç¶ç¶çã«åãçµãã§ããŸãã
- ããåºç¯ãªèšèªãµããŒãïŒ ããå€ãã®ããã°ã©ãã³ã°èšèªãSTMãçµ±åããããSTMãæå¹ã«ããã©ã€ãã©ãªãæäŸããã§ãããã
- æ°ããã¢ããªã±ãŒã·ã§ã³ïŒ STMã®ãŠãŒã¹ã±ãŒã¹ã¯ãåŸæ¥ã®äžŠè¡ããŒã¿æ§é ãè¶ ããŠã忣ã·ã¹ãã ããªã¢ã«ã¿ã€ã ã·ã¹ãã ãããã³é«æ§èœã³ã³ãã¥ãŒãã£ã³ã°ãªã©ã®åéã«æ¡å€§ããå¯èœæ§ããããŸããããã«ã¯ãäžçèŠæš¡ã®éèååŒãã°ããŒãã«ãµãã©ã€ãã§ãŒã³ç®¡çãåœéçãªããŒã¿åæãªã©ãå«ãŸããŸãã
ã°ããŒãã«ãœãããŠã§ã¢éçºã³ãã¥ããã£ã¯ããããã®çºå±ãæ¢æ±ããããšããå©çãåŸãŸããäžçããŸããŸãçžäºæ¥ç¶ãããã«ã€ããŠãã¹ã±ãŒã©ãã«ã§ä¿¡é Œæ§ãé«ããäžŠè¡æ§ã®ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããèœåã¯ãããŸã§ä»¥äžã«éèŠã«ãªããŸããSTMã¯ããããã®èª²é¡ã«å¯ŸåŠããããã®å®è¡å¯èœãªã¢ãããŒããæäŸããäžçäžã§ã€ãããŒã·ã§ã³ãšé²æ©ã®æ©äŒãçã¿åºããŸãã
çµè«
ãœãããŠã§ã¢ãã©ã³ã¶ã¯ã·ã§ãã«ã¡ã¢ãªïŒSTMïŒã¯ã䞊è¡ããŒã¿æ§é ãæ§ç¯ãã䞊è¡ããã°ã©ãã³ã°ãç°¡çŽ åããããã®ææãªã¢ãããŒããæäŸããŸããã¢ãããã¯æäœãšç«¶å管çã®ã¡ã«ããºã ãæäŸããããšã«ãããSTMã¯éçºè ãããå¹ççã§ä¿¡é Œæ§ã®é«ã䞊åã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããããšãå¯èœã«ããŸãã課é¡ã¯æ®ããŸãããç¹ã«å€æ§ãªãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããé«ã¬ãã«ã®ããã©ãŒãã³ã¹ãäžè²«æ§ãã¹ã±ãŒã©ããªãã£ãå¿ èŠãšããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãéçºããå ŽåãSTMã®å©ç¹ã¯èšãç¥ããŸãããæ¬¡ã®ãœãããŠã§ã¢éçºã«çæããéã«ã¯ãSTMã®åãèæ ®ããããããã«ãã³ã¢ããŒããŠã§ã¢ã®æœåšèœåãæå€§éã«åŒãåºããã°ããŒãã«ãœãããŠã§ã¢éçºã®ãã䞊è¡çãªæªæ¥ã«ã©ã®ããã«è²¢ç®ã§ããããèããŠã¿ãŠãã ããã